package com.java;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class ExecutorsAPI {
    public static void main(String[] args) {
        // defaultThreadFactory：默认线程工厂
        Executors.defaultThreadFactory();

        // newCachedThreadPool：无上限线程池，用于执行大量短时任务。核心线程数为0，最大线程数为Integer最大值，最大空闲时间为60ms，阻塞队列为SynchronousQueue
        Executors.newCachedThreadPool();

        // newFixedThreadPool：有上限线程池。核心线程数=最大线程数，最大空闲时间为0，阻塞队列为LinkedBlockingQuene
        Executors.newFixedThreadPool(2);

        // newSingleThreadExecutor：单线程线程池。核心线程数=最大线程数=1，最大空闲时间为0，阻塞队列为LinkedBlockingQuene
        Executors.newSingleThreadExecutor();

        // newScheduledThreadPool：定时线程池，用于执行定时或周期性任务。核心线程数指定，最大线程数为Integer最大值，最大空闲时间为0，阻塞队列为DelayedWorkQueue
        ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
        scheduledExecutorService.schedule(new Runnable() { // 延迟1分钟后开始执行
            @Override
            public void run() {
                System.out.println("任务运行中");
            }
        }, 1, TimeUnit.SECONDS);
        scheduledExecutorService.scheduleAtFixedRate(new Runnable() { // 延迟1分钟后开始执行，每隔10分钟执行一次？
            @Override
            public void run() {
                System.out.println("任务运行中");
            }
        }, 1, 10, TimeUnit.SECONDS);
        scheduledExecutorService.scheduleWithFixedDelay(new Runnable() { // 延迟1分钟后开始执行，每隔10分钟执行一次？
            @Override
            public void run() {
                System.out.println("任务运行中");
            }
        }, 1, 10, TimeUnit.SECONDS);
    }
}
